package gestores;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import componentes.Deporte;
import componentes.Disponibilidad;
import componentes.LugarDeRealizacion;

import dao.DAO_Lugar;
import dto.DTOcompetencia;

public class GestorLugares {
	private static GestorLugares INSTANCE = null;
	/**
     * constructor
     */
    private GestorLugares() {
	     }
    
    /**
     *  Metodo para obtener una instancia, si existe la devuelve, sino la crea
     * @return instancia si existe
     */
    public static GestorLugares getInstance(){
 		if (INSTANCE == null) { 
            INSTANCE = new GestorLugares();            
        }
 		return INSTANCE;
    }

	public void verificarLugar(List<String> lugares) {
		// TODO: implentar. Retornar disponibilidad
		
		
	}

	public int disponibilidad(String lugar, String fecha) {
		// TODO: implementar
	//	buscarLugar(lugar);
		
		return 0;
	}

	public void setearDisponibiliadd(String lugar, String fecha) {
		// TODO: implentar
		
	}
       
    public ArrayList<Disponibilidad> buscarLugaresSegundDeporte(DTOcompetencia dtoCompetencia, String correo) throws SQLException{

    	String nombre;
    	String descripcion;
    	String codigo;
    	
    	ResultSet aux;
    	ArrayList<Disponibilidad> lista = new ArrayList<Disponibilidad>();
    	ArrayList<Deporte> deportesDelLugar = null;
    	LugarDeRealizacion lugar = null;
    	Disponibilidad disponibilidad = null;
    	
    	
    	
    	
    
    	
    	for(int i =0 ; i< dtoCompetencia.getLugaresYDisp().length ; i++){
    	
    		aux = DAO_Lugar.getInstance().buscarLugarYDeporte(dtoCompetencia.getLugaresYDisp()[i][0],correo);
    		
    		while(aux.next()){
    			
    			nombre = aux.getString("nombre");
        		descripcion = aux.getString("descripcion");
        		codigo = aux.getString("codigo");
        		
        		deportesDelLugar = new ArrayList<Deporte>();
        		deportesDelLugar.add( new Deporte(aux.getString("nombreDeporte")));
        		
        		lugar = new LugarDeRealizacion(nombre, codigo, descripcion, deportesDelLugar);
        		
        		disponibilidad = new Disponibilidad( Integer.parseInt(dtoCompetencia.getLugaresYDisp()[i][1]), lugar);
    		}
    	
    		
    		lista.add(disponibilidad);
    	}
   
	

    	return lista; 
    	
    }

	public ArrayList<String> getIdLugares(ArrayList<Disponibilidad> disponibilidades, String correo) throws SQLException {
		// TODO Auto-generated method stub
		ArrayList<String> dispoDeLugares = new ArrayList<String>();
		ResultSet aux;
		
		for(int i=0; i<disponibilidades.size(); i++){
			aux = DAO_Lugar.getInstance().getIdLugares(disponibilidades.get(i).getLugar().getNombre(), correo);
			aux.next();
			dispoDeLugares.add(aux.getString("id_lugar"));
		}
		
		
		
		
		return dispoDeLugares;
	}

    public String[][] buscarLugares(String nombreComp){
    	String[][] listaLugares = null;
    	ResultSet lugares = DAO_Lugar.getInstance().buscarLugares(nombreComp);
    	try {
			lugares.last();
			listaLugares = new String[lugares.getRow()][2];
	    	lugares.first();
	    	int i=0;
    		listaLugares[i][0]=lugares.getString("nombre");
        	listaLugares[i][1]=lugares.getString("disponibilidad");
        	i++;
	    	while(lugares.next()){
	    		listaLugares[i][0]=lugares.getString("nombre");
	        	listaLugares[i][1]=lugares.getString("disponibilidad");
	        	i++;
	    	}
    	} catch (SQLException e) {
			e.printStackTrace();
		}
    	return listaLugares;
    }

    
    
    
    
    
    
    
	public LugarDeRealizacion getLugarEncuentro(String id_encuentro) throws SQLException {
		// TODO Auto-generated method stub
		ResultSet aux;
		LugarDeRealizacion lugar;
		ArrayList<Deporte> deportesPermitidos = new ArrayList<Deporte>();
		Deporte deporte;
		
		aux = DAO_Lugar.getInstance().getLugarEncuentro(id_encuentro);
		
		while(aux.next()){
			deporte = new Deporte(aux.getString("nombreDeporte"));
			deportesPermitidos.add(deporte);
		}

		aux.first();
		lugar = new LugarDeRealizacion(aux.getString("nombre"),  aux.getString("codigo"), aux.getString("descripcion"), deportesPermitidos);
		
		
		return lugar;
	}

	
	//Dado el nombre del lugar devuelve el id
	public int getIdLugar(String nombre) throws SQLException {
		// TODO Auto-generated method stub
		ResultSet aux;
		aux = DAO_Lugar.getInstance().getIdLugar(nombre);
		aux.next();
		
		
		return aux.getInt("id_lugar");
	}

	
        
}
